/**
 * 单例获取根元素的font-size
 */
const FontSizeManager = (function () {
    let instance;
    let rootFontSize = null;
    let fontContext = null; //用于计算字号
    let fontCache = {}; // 用于缓存计算的字号
 
    // 更新根节点字号
    function updateFontSize() {
        const rootElement = document.documentElement;
        const newFontSize = parseFloat(getComputedStyle(rootElement).fontSize);
        if (newFontSize !== rootFontSize) {
            rootFontSize = newFontSize;
            console.log('Root font-size updated to:', rootFontSize);
        }
    }

    // 初始化基本信息
    function initBaseInfo() {
        updateFontSize();
        // 动态计算字体大小
        const canvas = document.createElement('canvas'); // 复用 canvas 元素
        const context = canvas.getContext('2d');
        fontContext = context;
    }

 
    function getInstance() {
        if (!instance) {
            // 初始化逻辑在这里执行
            initBaseInfo();
 
            instance = {
                // 获取根节点字号
                getRootFontSize: function () {
                    return rootFontSize;
                },
                // 刷新根节点字号
                refreshFontSize: function () {
                    updateFontSize();
                },
                // 计算文本宽度
                getTextWidth: function (text, fontSize) {
                    if (!text) return 0;
                    fontContext.font = `${fontSize}px -apple-system, BlinkMacSystemFont,"Segoe UI","HarmonyOS Sans","Roboto","PingFang SC",sans-serif`;
                    return fontContext.measureText(text).width;
                },
                // 根据文本和父容器宽度作为 key ,缓存字号信息
                updateFontCache: function (textKey, fontInfo) {
                    if (!fontCache[textKey]) {
                        fontCache[textKey] = '';
                    }
                    fontCache[textKey] = fontInfo;
                },
                // 获取缓存的字号信息
                getFontCache: function (textKey) {
                    return fontCache[textKey] || '';
                },

            };
        }
        return instance;
    }
 
    return {
        getInstance: getInstance
    };
})();

export default FontSizeManager;